"""
集合set是一个无序的不重复元素序列，无索引，用于数据的交集并集差集的获取，集合无获取元素的任何方法只能用for循环
"""

#通过set函数创建集合，不能使用{}创建空集合，因为它是字典
a_set = set()
b_set = set([1,2,3,4,5,5]) # 将列表转换成集合,会去重
c_set = {1,2,3}
d_set = {(1,2,3,4,5)}
# d_set = {[1,2,3,4,5],1} 报错，只能加载不可变类型

#add用于集合中添加一个元素，如果集合已经存在该元素，则函数不执行
b_set.add('winner')

#update加入一个新的集合（或列表、元组、字符串），如果新集合内的元素在原集合存在则无视
b_set.update("python") #会把字符串拆开，一个个字符去重后存入集合
print(b_set)

#remove将集合中的某个元素删除，如果不存在会报错
b_set.remove('winner')
print(b_set)

#clear清空集合,del清除集合内存
b_set.clear()
print(b_set) #显示set()
del b_set

#差集
#a,b两个集合，由所有属于a且不属于b的元素组成的集合叫做a与b的差集
#difference返回集合的差集
a_set = {1,2,3,4,5}
b_set = {4,5,6,7,8}
print(a_set.difference(b_set)) #{1, 2, 3}

#交集intersection
print(a_set.intersection(b_set)) #{4, 5}

#并集union
print(a_set.union(b_set)) #{1, 2, 3, 4, 5, 6, 7, 8}

#isdisjoint判断两个集合是否包含相同的元素，两个集合元素各个不同返回True,否则返回False
print(a_set.isdisjoint(b_set)) #False

"""
不同数据类型间的转换
"""

#字符串转列表的函数string.split(sep=None,maxsplit=-1)
#sep:切割的规则符号，默认空格
#maxsplit:切割的次数，默认无限制
a = 'ab,cd,ef,gh'
print(a.split(','))

#列表转字符串的函数join  'sep'.join(iterable)
#sep:生成的字符串用来分割列表每个元素的符号
#iterable:字符串类型的列表，或元组，或集合
b = ','.join(('1','2','3','4','5'))
print(b)

#字符串排序后转换成列表
print(sorted('gfdsa'))
#将字符串排序
sorted_str = ''.join(sorted('asdfghjnvm'))
print(sorted_str)

#字符串与bytes类型的转换，bytes类型字符串前加b标记
name = b'my name is winner'
print(name.replace(b'winner', b'fangmin'))
print(dir(name)) #打印它支持的所有函数

#encode 字符串转bytes的函数 string.encode(encoding='utf-8',errors='strict')
#strict默认直接抛错误，也可选择ignore忽略错误
# name = b"房敏"
#print(name) 报错，不能使用中文
name = 'hello,房敏'
bytes_name = name.encode('utf-8')
print(bytes_name) # b'hello,\xe6\x88\xbf\xe6\x95\x8f'

#decode bytes转字符串的函数 bytes.decode(encoding='utf-8',errors='strict')
#strict默认直接抛错误，也可选择ignore忽略错误
print(bytes_name.decode('utf-8')) # hello,房敏

#元组、列表、集合间的转换
new_set = set([1,2,3,4,5])
new_tuple = tuple([1,2,3,4,5])
new_set = set((1,2,3,4,5))
new_list = list((1,2,3,4,5))
new_tuple = tuple({1,2,3,4,5})